package com.smart.community.region.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.smart.community.region.entity.ShopOwner;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 店铺业主Mapper接口
 * 
 * @author Wu.Liang
 * @version 1.0.0
 * @since 2025-09-30
 */
public interface ShopOwnerMapper extends BaseMapper<ShopOwner> {
    
    /**
     * 分页查询店铺业主列表
     * 
     * @param page 分页参数
     * @param shopId 店铺ID
     * @param ownerName 业主姓名
     * @param ownerType 业主类型
     * @return 分页结果
     */
    IPage<ShopOwner> selectShopOwnerPage(Page<ShopOwner> page,
                                          @Param("shopId") Long shopId,
                                          @Param("ownerName") String ownerName,
                                          @Param("ownerType") Integer ownerType);
    
    /**
     * 根据店铺ID查询业主信息
     * 
     * @param shopId 店铺ID
     * @return 业主信息
     */
    ShopOwner selectOwnerByShopId(@Param("shopId") Long shopId);
    
    /**
     * 根据业主电话查询业主信息
     * 
     * @param ownerPhone 业主电话
     * @return 业主信息
     */
    ShopOwner selectOwnerByPhone(@Param("ownerPhone") String ownerPhone);
    
    /**
     * 根据业主类型查询业主列表
     * 
     * @param ownerType 业主类型
     * @return 业主列表
     */
    List<ShopOwner> selectOwnersByType(@Param("ownerType") Integer ownerType);
    
    /**
     * 根据店铺ID查询业主列表
     * 
     * @param shopId 店铺ID
     * @return 业主列表
     */
    List<ShopOwner> selectOwnersByShopId(@Param("shopId") Long shopId);
    
    /**
     * 检查业主电话是否存在
     * 
     * @param ownerPhone 业主电话
     * @param excludeId 排除的业主ID
     * @return 是否存在
     */
    Boolean existsByOwnerPhone(@Param("ownerPhone") String ownerPhone, 
                               @Param("excludeId") Long excludeId);
    
    /**
     * 检查身份证号是否存在
     * 
     * @param ownerIdCard 身份证号
     * @param excludeId 排除的业主ID
     * @return 是否存在
     */
    Boolean existsByIdCard(@Param("ownerIdCard") String ownerIdCard, 
                          @Param("excludeId") Long excludeId);
    
    /**
     * 统计业主数量
     * 
     * @param shopId 店铺ID
     * @param ownerType 业主类型
     * @return 业主数量
     */
    Integer countOwners(@Param("shopId") Long shopId, 
                       @Param("ownerType") Integer ownerType);
}
